home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
magic
/
i
/
mtstream.i
< prev
next >
Wrap
Text File
|
1997-10-26
|
7KB
|
196 lines
(*----------------------------------------------------------------------*
* *
* MAGICTOOLS Modula's All purpose GEM Interface Cadre Toolbox *
* ÿ ÿ ÿ ÿ ÿ *
*----------------------------------------------------------------------*
* Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
*----------------------------------------------------------------------*
* Dieses Modul ist urheberrechtlich geschtzt. *
* *
* Die Verffentlichung des Quelltextes oder Teilen daraus, sowie die *
* Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
* oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail- *
* boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen *
* Einverstndnisserklrung des Autors. *
* *
* Die Verbreitung des Moduls als Teil eines gelinkten Programms ist *
* fr Lizenznehmer ausdrcklich erlaubt! Der Autor behlt sich das *
* Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
* widerrufen. *
*----------------------------------------------------------------------*)
IMPLEMENTATION MODULE mtStreams;
(*----------------------------------------------------------------------*
* Int. Vers | Datum | Name | nderung *
*-----------+----------+------+----------------------------------------*
* 3.00 | 18.01.92 | Hp | *
*-----------+----------+------+----------------------------------------*)
(* IMPLEMENTATION FR >>> Megamax-Modula-2 <<< *)
(* *)
(*$R- Range-Checks *)
(*$S- Stack-Check *)
(* *)
(*----------------------------------------------*)
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
CastToChar, CastToByte, CastToByteset, CastToInt,
CastToCard, CastToBitset, CastToWord, CastToLInt,
CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
TosVersion, Accessory, Basepage, SysHeader, TosDate;
FROM Storage IMPORT ALLOCATE, DEALLOCATE;
FROM SYSTEM IMPORT ADDRESS, BYTE, WORD, ADR, TSIZE;
FROM MagicStrings IMPORT Assign, Equal, CAPS;
FROM MagicDOS IMPORT ReadOnly, Hidden, System, Volume, Folder, Archive,
Fcreate, NamePRN, NameAUX, NameCON, Read, Write,
ReadWrite, StdIn, StdOut, Serial, Printer, Fopen,
Fclose, Fread, Fwrite, Fdelete, SeekStart, SeekPos,
SeekEnd, Fseek;
TYPE STREAM = POINTER TO Stream;
Stream = RECORD
out: sINTEGER;
endpos: lINTEGER;
fname: ARRAY [0..255] OF CHAR;
END;
PROCEDURE OpenStream (VAR s: STREAM; name: ARRAY OF CHAR;
kind: StreamMode): INTEGER;
VAR lc: lINTEGER;
BEGIN
ALLOCATE (s, TSIZE (Stream)); IF s = NIL THEN RETURN -1; END;
WITH s^ DO
Assign (name, fname); CAPS (name);
IF Equal (name, NameCON) THEN out:= StdOut; endpos:= 0;
ELSIF Equal (name, NamePRN) THEN out:= Printer; endpos:= 0;
ELSIF Equal (name, NameAUX) THEN out:= Serial; endpos:= 0;
ELSE
out:= -1; endpos:= 0;
IF kind = READ THEN
out:= Fopen (name, Read);
IF out < 0 THEN RETURN -1; END;
endpos:= Fseek (0, out, SeekEnd);
lc:= Fseek (0, out, SeekStart);
ELSE
out:= Fopen (name, {ReadWrite});
IF out < 0 THEN out:= Fcreate (name, {}); END;
IF out < 0 THEN RETURN -1; END;
endpos:= Fseek (0, out, SeekEnd);
END;
END;
END;
RETURN 0;
END OpenStream;
PROCEDURE CloseStream (VAR s: STREAM): sINTEGER;
VAR i: sINTEGER;
BEGIN
IF s # NIL THEN
IF s^.out > Printer THEN
i:= Fclose (s^.out);
IF i < 0 THEN RETURN i; END;
END;
DEALLOCATE (s, 0);
RETURN 0;
END;
END CloseStream;
PROCEDURE WriteStream (s: STREAM; VAR a: ARRAY OF LOC);
VAR no: lCARDINAL;
BEGIN
IF s # NIL THEN
WITH s^ DO
no:= LONG (HIGH (a) + 1); Fwrite (out, no, ADR(a));
END;
END;
END WriteStream;
PROCEDURE ReadStream (s: STREAM; VAR a: ARRAY OF LOC);
VAR no: lCARDINAL;
h: sINTEGER;
BEGIN
IF s # NIL THEN
WITH s^ DO
IF out = StdOut THEN h:= StdIn; ELSE h:= out; END;
IF h = Printer THEN RETURN; END;
no:= LONG (HIGH (a) + 1); Fread (h, no, ADR(a));
END;
END;
END ReadStream;
PROCEDURE Streampos (s: STREAM): lINTEGER;
BEGIN
IF s # NIL THEN
IF s^.out > Printer THEN RETURN Fseek (0, s^.out, SeekPos);
ELSE RETURN 0;
END;
END;
END Streampos;
PROCEDURE StreamEnd (s: STREAM);
VAR p: lINTEGER;
BEGIN
IF s # NIL THEN
IF s^.out > Printer THEN p:= Fseek (0, s^.out, SeekEnd); END;
END;
END StreamEnd;
PROCEDURE SetStreampos (s: STREAM; mode: Posmode; pos: lINTEGER);
VAR p: lINTEGER;
BEGIN
IF s # NIL THEN
IF s^.out > Printer THEN p:= Fseek (pos, s^.out, ORD(mode)); END;
END;
END SetStreampos;
PROCEDURE EndofStream (s: STREAM): BOOLEAN;
VAR p: lINTEGER;
BEGIN
IF s # NIL THEN
IF s^.out > Printer THEN p:= Fseek (0, s^.out, SeekPos); RETURN p >= s^.endpos;
ELSE RETURN FALSE;
END;
END;
END EndofStream;
PROCEDURE StreamName (s: STREAM; VAR name: ARRAY OF CHAR);
BEGIN
IF s # NIL THEN Assign (s^.fname, name);
ELSE name[0]:= 0C;
END;
END StreamName;
PROCEDURE StreamHandle (s: STREAM; VAR handle: sINTEGER);
BEGIN
IF s # NIL THEN handle:= s^.out;
ELSE handle:= -1;
END;
END StreamHandle;
END mtStreams.